package com.pandai.leetcode;

import java.lang.reflect.Array;
import java.util.Arrays;

public class Solution27 {
    /**
     *          双层for循环暴力解法
     * @param nums
     * @param val
     * @return
     */
    public int removeElement(int[] nums, int val) {
        int n = nums.length;
        int cnt = 0;
        for(int i=0;i<n;i++){
            if(nums[i] == val){
                // cnt用来统计出现cal的次数
                cnt++;
            }
        }
        int i=0;
        while(i<n){
            if(i+1 == n-cnt){
                // 处理完所有非val元素，跳出循环
                break;
            }
            if(nums[i] == val){
                nums = remove(i,nums);
            }else{
                i++;
            }
        }
        return n-cnt;
    }

    public int[] remove(int i,int[] nums){
        for(int k = i;k<=nums.length-2;k++){
            nums[k] = nums [k+1];
        }
        return nums;
    }

    /**
     *      双指针写法
     * @param nums
     * @param val
     * @return
     */
    public int removeElement1(int[] nums, int val) {
        int n = nums.length;
        // k用来记录当遍历到的不是val值的元素的索引下标
        int k = 0;
        for(int i=0;i<n;i++){
            if(nums[i] != val){
                nums[k] = nums[i];
                k++;
            }
        }
        return k;
    }

    public static void main(String[] args) {
        Solution27 solution27 = new Solution27();
        int[] nums = {0,1,2,2,3,0,4,2};
        solution27.removeElement1(nums,2);
        System.out.println(Arrays.toString(nums));
    }
}
